# 导入 Tkinter 库
import tkinter as tk
from tkinter import ttk

# 创建主窗口
root = tk.Tk()
root.title("贝叶斯定理")

# 设置窗口大小
root.geometry("600x300")

# 病历数据集
data = [
    {'name': '张三', 'flu': '0', 'hot': '1'},
    {'name': '李四', 'flu': '1', 'hot': '1'},
    {'name': '王五', 'flu': '1', 'hot': '1'}
]

p_a_b = 0.8  # 发烧中感冒者的初始概率

# 函数：计算并显示发烧可能感冒的概率
def bayes():
    size = len(data)
    # 感冒患者数量
    flu = sum(1 for item in data if item['flu'] == '1')
    # 发烧患者数量
    hot = sum(1 for item in data if item['hot'] == '1')
    # 既感冒又发烧患者数量
    flu_hot = sum(1 for item in data if item['flu'] == '1' and item['hot'] == '1')
    # 算法1：发烧可能感冒的概率 = 既感冒又发烧患者数量 / 发烧患者数量
    p1 = flu_hot / hot
    # 算法2：(感冒患者数量/患者总数 × 既感冒又发烧患者数量/感冒患者数量) / (发烧患者数量/患者总数)
    # 感冒中发烧的概率
    p_a_b = flu_hot / flu
    p2 = ((flu / size) * p_a_b) / (hot / size)
    # 显示代码
    result_label.config(text=f"算法1概率: {p1}\n算法2概率: {p2}")

# 函数：增加病历
def add():
    # 返回数据
    name = name_entry.get()
    if name != "":
        flu = '1' if flu_val.get() else '0'
        hot = '1' if hot_val.get() else '0'

        json = {'name': name, 'flu': flu, 'hot': hot}
        data.append(json)
        show()

# 函数：显示数据到表格
def show():
    table.delete(*table.get_children())
    for item in data:
        table.insert('', 'end', values=(item['name'], item['flu'], item['hot']))

frame1 = tk.Frame(root)
frame1.pack()
bayes_button = tk.Button(frame1, text="诊断", command=bayes)
bayes_button.pack(side="left")

name_label = tk.Label(frame1, text="姓名:").pack(side="left")
name_entry = tk.Entry(frame1)
name_entry.pack(side="left")
# 复选框
flu_val = tk.IntVar()
flu_label = tk.Label(frame1, text="感冒:")
flu_label.pack(side="left")
flu_checkbox = tk.Checkbutton(frame1, variable=flu_val)
flu_checkbox.pack(side="left")
hot_val = tk.IntVar()
hot_label = tk.Label(frame1, text="发烧:")
hot_label.pack(side="left")
hot_checkbox = tk.Checkbutton(frame1, variable=hot_val)
hot_checkbox.pack(side="left")
# 按钮
add_button = tk.Button(frame1, text="增加", command=add)
add_button.pack(side="left")


# 结果标签
result_label = tk.Label(root, text="", justify=tk.LEFT)
result_label.pack()

# 表格
table = ttk.Treeview(root, columns=('name', 'flu', 'hot'), show='headings')
table.heading('name', text='姓名')
table.heading('flu', text='感冒')
table.heading('hot', text='发烧')
table.pack()

# 初始化表格
show()

# 运行主循环
root.mainloop()